
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;
using Gman.Entity.Entities;
using Gman.Entity.Interfaces;
using Gman.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;


namespace Gman.Data
{
    //-------------------------------------------------------------------
    //Archivo     : SedeDA.cs
    //Proyecto    : Gman
    //Creacion    : BIS(NombreDesarrollador) 20130226
    //Modificacion: 
    //Descripcion : Clase para capa de datos.
    //-------------------------------------------------------------------
    public class SedeDA : ISede
    {

        Database db = DatabaseFactory.CreateDatabase();

        //-----------------------------------------------------------------------------------------------
        //Nombre: Listar
        //Objetivo: Retorna una lista de registros de tipo SedeBE  
        //Creacion    : TISI(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public IList<SedeBE> Listar(SedeBE oItem)
        {
            IList<SedeBE> lista = new List<SedeBE>();
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_ListarSede");
                db.AddInParameter(cmd, "@IDEmp", DbType.Int32, oItem.IDEmp);

                using (IDataReader oR = db.ExecuteReader(cmd))
                {
                    lista = MakeUniqueDatos(oR);
                }

            }
            catch (Exception ex)
            {
                throw new Exception("SedeDA.Listar()", ex);
            }
            finally
            {
            }
            return lista;
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Obtener
        //Objetivo: Retorna un objeto de Tipo SedeBE  
        //Creacion    : BIS(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public SedeBE Obtener(SedeBE oItem)
        {
            SedeBE itemResult = null;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerSede");
                db.AddInParameter(cmd, "@CodSede", DbType.String, oItem.CodSede);
                db.AddInParameter(cmd, "@IDEmp", DbType.Int32, oItem.IDEmp);

                using (IDataReader oR = db.ExecuteReader(cmd))
                {
                    while (oR.Read())
                    {
                        itemResult = MakeDatosMapeados(oR);
                    }
                }
                return itemResult;
            }
            catch (Exception ex)
            {
                throw new Exception("SedeDA.Obtener()", ex);
            }
            finally
            {
            }
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Registrar
        //Objetivo: Almacena el registro de un objeto de tipo SedeBE  
        //Creacion    : TISI(NombreDesarrollador) 20130226  
        //----------------------------------------------------------------------------------------------
        public int Registrar(SedeBE oItem)
        {
            int resultado = 0;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_RegistrarSede");
                //db.AddInParameter(cmd, "@IDSede", DbType.Int64 , oItem.IDSede);
                db.AddInParameter(cmd, "@CodSede", DbType.String, oItem.CodSede);
                db.AddInParameter(cmd, "@NomSede", DbType.String, oItem.NomSede);
                db.AddInParameter(cmd, "@DirecSede", DbType.String, oItem.DirecSede);
                db.AddInParameter(cmd, "@TlfSede", DbType.String, oItem.TlfSede);
                db.AddInParameter(cmd, "@EstadoSede", DbType.Int32, oItem.EstadoSede);
                db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
                //db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
                db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
                //db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
                //db.AddInParameter(cmd, "@fecMod", DbType.DateTime, oItem.fecMod);
                //db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
                db.AddInParameter(cmd, "@IDEmp", DbType.Int32, oItem.IDEmp);
                db.AddInParameter(cmd, "@CodUbigeo", DbType.String, oItem.CodUbigeo);
                
                resultado = Convert.ToInt32(db.ExecuteScalar(cmd));

            }
            catch (Exception ex)
            {
                throw new Exception("SedeDA.Registrar()", ex);
            }
            finally
            {

            }
            return resultado;
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Actualizar
        //Objetivo: Actualiza el registro de un objeto de tipo SedeBE 
        //Creacion    : TISI(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public int Actualizar(SedeBE oItem)
        {
            int resultado = 0;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_ActualizarSede");
                db.AddInParameter(cmd, "@IDSede", DbType.Int64, oItem.IDSede);
                db.AddInParameter(cmd, "@CodSede", DbType.String, oItem.CodSede);
                db.AddInParameter(cmd, "@NomSede", DbType.String, oItem.NomSede);
                db.AddInParameter(cmd, "@DirecSede", DbType.String, oItem.DirecSede);
                db.AddInParameter(cmd, "@TlfSede", DbType.String, oItem.TlfSede);
                //db.AddInParameter(cmd, "@EstadoSede", DbType.Int32 , oItem.EstadoSede);
                //db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
                //db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
                //db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
                db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
                //db.AddInParameter(cmd, "@fecMod", DbType.DateTime, oItem.fecMod);
                db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
                db.AddInParameter(cmd, "@IDEmp", DbType.Int32, oItem.IDEmp);
                db.AddInParameter(cmd, "@CodUbigeo", DbType.String, oItem.CodUbigeo);

                resultado = db.ExecuteNonQuery(cmd);

            }
            catch (Exception ex)
            {
                throw new Exception("SedeDA.Actualizar()", ex);
            }
            finally
            {

            }
            return resultado;
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Eliminar
        //Objetivo: Elimina el registro de un objeto de tipo SedeBE  
        //Creacion    : BIS(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public int Eliminar(SedeBE oItem)
        {
            int resultado = 0;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_EliminarSede");
                db.AddInParameter(cmd, "@IDSede", DbType.Int64, oItem.IDSede);


                resultado = db.ExecuteNonQuery(cmd);

            }
            catch (Exception ex)
            {
                throw new Exception("SedeDA.Eliminar()", ex);
            }
            finally
            {

            }
            return resultado;
        }

        private IList<SedeBE> MakeUniqueDatos(IDataReader oR)
        {
            IList<SedeBE> list = new List<SedeBE>();

            while (oR.Read())
                list.Add(MakeDatosMapeados(oR));

            return list;
        }

        private SedeBE MakeDatosMapeados(IDataReader oR)
        {
            var itemResult = new SedeBE();

            itemResult.IDSede = oR["IDSede"].ToInt64();
            itemResult.CodSede = oR["CodSede"].ToString();
            itemResult.NomSede = oR["NomSede"].ToString();
            itemResult.CodUbigeo = oR["CodUbigeo"].ToString();
            itemResult.DirecSede = oR["DirecSede"].ToString();
            itemResult.TlfSede = oR["TlfSede"].ToString();
            itemResult.EstadoSede = oR["EstadoSede"].ToInt32();
            itemResult.UsuReg = oR["UsuReg"].ToString();
            itemResult.FecReg = oR["FecReg"].ToDateTime();
            itemResult.TermCnxReg = oR["TermCnxReg"].ToString();
            itemResult.UsuMod = oR["UsuMod"].ToString();
            itemResult.fecMod = oR["fecMod"].ToDateTime();
            itemResult.TermCnxMod = oR["TermCnxMod"].ToString();
            itemResult.IDEmp = oR["IDEmp"].ToInt32();

            return itemResult;
        }
    }
}